package com.qf.day12;

/**
 * @author wgy
 * @version V1.0
 * @Project day12
 * @Package com.qf.day12
 * @Description: ${TODO}
 * @Date 2021/6/2 11:12
 */
public class TestAnimal4 {
    public static void main(String[] args) {
        //向上转型：子类转成父类类型
        //(1) 逻辑上: 有继承关系,Dog is an Animal
        //(2) 数据范围：Animal表示数据范围大于Dog
        //注意:使用父类变量只能调用父类的属性和方法，以及子类重写的方法，不能调用子类独有的属性和方法。
        Animal animal=new Dog();
        animal.eat();
        animal.sleep();
        System.out.println("--------------");
        //向下转型：父类转回子类原始类型
        //前提：必须向上转型，才可以向下转型。
        //调用子类独有的属性和方法，包括从父类继承的属性和方法。
        Dog dog=(Dog)animal;
        dog.eat();
        dog.sleep();
        dog.run();

        //错误写法1:不能把一个父类对象强转成子类对象
//        Animal animal2=new Animal();
//        Dog dog2=(Dog) animal2;
        //错误写法2: 不同子类对象之间不能相互转换
        Animal animal3=new Cat();
        Dog dog3=(Dog)animal3;

    }
}
